#Funkcije predstavljaju jedan od osnovnih gradivnih blokova u svim programskim jezicima, pa tako i u programskom
#jeziku Julia. U opštem slučaju, funkcija se definiše prema sledećem obrascu:
#function name_of_function(arguments)
# line1
# line2
# ...
# lineN
#end
#gde ključna reč function označava početak definicije naše funkcije, name_of_function označava ime koje želimo
#da damo našoj funkciji, i kako ćemo je pozivati iz drugih programskih celina, arguements označava torku koju
#prosleđujemo našoj funkciji kao ulazne argumente, a line1,..,lineN predstavljaju naredbe koje čine obradu koja
#se dešava u našoj funkciji. Na primer, možemo definisati funkciju na sledeći način:
function ispis()
println("Ovo je funkcija za ispis")
end
#Sada možemo izvršiti poziv ove funkcije sa:
ispis()
#Ovo je bio primer funkcije koja radi samo jedan običan ispis stringa. Ukoliko želimo da naša funkcija vraća neku
#povratnu vrednost, moramo to naznačiti sa naredbom return. To možemo postići kao u sledećem primeru:
function uk_cena(osn_cena)
stopa_poreza = 0.15;
return osn_cena * (1 + stopa_poreza);
end
osn_cena_cokolade = 80;
osn_cena_caja = 150;
println("Vaš račun za čaj iznosi: ", uk_cena(osn_cena_caja)); #Kao što vidimo, povratna vrednost može se koristiti
println("Vaš račun iznosi: ", uk_cena(osn_cena_cokolade)); #za direktan ispis u prinln() funkciji
#U okviru programskog jezika Julia takođe postoji i mogućnost uvođenja opcionih argumenata:
#Ukoliko je funkcija definisana tako da radi sa N argumenata, a mi smo označili k-ti po redu da mora da bude opcioni
#Onda i svi oni koji slede posle njega tj. preostalih N - k takođe moraju biti opcioni. Na primer:
function najveci_broj(br1, br2, br3 = 0, br4 = 0)
return max(max(max(br1,br2),br3),br4) #funkcija koja za do 4 prosleđena broja vraća najveći među njima
end
#minimalno prosleđujemo 2
najveci_broj(500,4,1000,1) #poziv funkcije sa 4 broja
najveci_broj(1000000,40) #poyiv funkcije sa 2 broja, a preostala 2 se automatski postavljaju na nulu
#Ukoliko želimo funkciju koja ima za cilj vraćanje više povratnih vrednosti, onda za njeno definisanje
#moramo da koristimo torku kao povratni tip naše funkcije, a na čijim koordinatama biti upravo rezultati obrade naše
#funkcije koje želimo da vratimo
#Primer:
function sredine(br1,br2) #funkcija koja vraca aritmetičku i geometrijsku sredinu dva broja
return (br1 + br2) / 2, sqrt(br1*br2)
end
br1 = 40; br2 = 50; #ovde vidimo da je moguće da u jednom redu imamo i vše naredbi, ukoliko
#su one odvojene operatorom ;
ar_sr, g_sr = sredine(br1, br2);
ar_sr
g_sr
#STRINGOVI
#Strigovi, kao i u većini drugih programskih jezika, predstavljaju sekvencu od po nekoliko karaktera
#koji se odnose na neku celinu ili pojam. Stringovi se u programskom jeziku Julia definišu tako što se željeni niz
#karaktera koji će sačinjavati naš string okružimo sa obe strane sa ". Na primer:
string_primer1 = "Ovo je primer jednog stringa"
#Ukoliko nam je za ciljnu obradu bitna dužina stringa sa kojim raspolažemo (na primer, za formiranje naziva neke
#datoteke), to možemo kao i sa nizovima, postući primenom funkcije length() :
println("Dužina stringa string_primer1 iznosi: " , length(string_primer1));
#Potpuno analogno kao kod nizova, možemo izvršiti izdvajanje određenog podskupa karaktera koji čine naš string:
string_primer1[1],
string_primer1[1:5],
string_primer1[5:end],
string_primer1[10:15]
#Za izvlačenje podstringa našeg stringa možemo koristiti i funkciju SubString(string, begin, end), gde
#je string stringovska promenljiva koju prosleđujemo, begin je redni broj indeksa od kojeg počinje
#naš podstring, a end je rdni broj indeksa kojim se završava naš string.
#Primer korišćenja funkcije SubString():
SubString(string_primer1, 1, 5)
#Kao što možemo primetiti, rezultat je istovetan kao onaj dobijen sa string_primer1[1:5]
#Jedna veoma važna operacijakoju možemo raditi sa stringovima je i konkatenacija tj. nadovezivanje naših stringova.
#Ona se veoma lako može realizovati: Neka su nam data dtva stringa str1 i str2. Tada pozivanjem konstruktora string()
#Na sledeći način: string(str1, "", str2) dobijamo string koji predstavlja konkatenaciju stringova str1 i str2:
str1 = "Dobar "; str2 = "dan";
string(str1, "", str2)
#Za kraj, navedimo jos jednu veoma korišćenu operaciju nad stringovima: Leksikografsko poređenje.
#Neka su nam dati stringovi str1 i str2. Tada koristeći operator < izraz str1 < str2 predstavlja ispitivanje da li
#se str1 leksikografski nalazi pre str2. Rezultat ove operacije biće logičkog tipa. Analogno se ispitivanje može
#vršiti i sa drugim operatorima poretka:
str1 < str2,
str1 <= str2,
str1 > str2,
str1 >= str2